package com.shs.main;

/**
 * @Author 晚点再动心
 * @Date 2022/9/19
 */
public class Stack {
    public String[] stackArr = new String[16];
    //栈顶部
    int top = -1;
    /**
     * 进栈
     * @param str str
     * @return {@link String}
     */
    public void push(String str) {
        if (isFull()){
            //如果满了对数组进行扩容
            resize();
        }
        //栈顶元素加1
        stackArr[++top] = str;
    }

    /**
     *出栈
     * @return {@link String}
     */
    public String pop() {
        return stackArr[top--];
    }

    /**
     * 清空栈
     */
    public void clean() {
        stackArr = null;
        top = -1;
    }

    /**
     * 判断栈的元素个数
     * @return int
     */
    public int length() {
        return top+1;
    }
    /**
     * 判断栈是否为空
     * @return boolean
     */
    public boolean isEmpty() {
        return top == -1;
    }
    /**
     * 判断栈是否已满
     * @return boolean
     */
    public boolean isFull() {
        return top == stackArr.length - 1;
    }

    /**
     * 取出栈顶元素
     * @return {@link String}
     */
    public String takeOut() {
        return stackArr[top];
    }

    /**
     * 数组扩容，1.5倍长度
     */
    private void resize() {
        String[] temp = new String[stackArr.length * 3 / 2 + 1];
        for (int i = 0; i < stackArr.length; i++) {
            temp[i] = stackArr[i];
        }
        stackArr = temp;
    }
}
